﻿namespace Parameters
{
    class Program6141
    {
        static void Main6141(string[] args)
        {
            Dowork();
        }

        static void Dowork()
        {
            int i = 0;  // int 是值类型
            Console.WriteLine(i);   // i = 0
            Pass.value(i);          // 值类型使用的是 i 的副本，i不变
            Console.WriteLine(i);   // i = 0

            WrappendInt wi = new WrappendInt(); // 创建类 WrappendInt 的另外一个实例
            Console.WriteLine(wi.Number);   // 0 // 被默认构造器初始化为 0
            Pass.Reference(wi);     // 调用方法，wi 和 param 将引用同一个对象
            Console.WriteLine(wi.Number);   // 42
        }
    }

    class Pass
    {
        public static void value(int param)
        {
            param = 42; // 赋值操作使用的是值类型参数的一个副本，原始参数不受影响
        }

        public static void Reference(WrappendInt param) // 创建类 WrappendInt 的一个实例
        {
            param.Number = 42;  // 此参数是引用类型的参数
        }
    }

    class WrappendInt   // 类是引用类型
    {
        public int Number;
    }
}
